// 引入模块
const fs = require("fs");

// 遍历读取文件 path:目录路径  filesList:文件信息列表
function readFile(path, filesList) {
  // 保存所有文件,需要用到同步读取
  let files = fs.readdirSync(path);
  // 遍历读取
  files.forEach((fileName) => {
    // 读取文件信息
    let states = fs.statSync(path + fileName);
    if (states.isDirectory()) {
      // 目录  递归读取
      readFile(path + fileName, filesList);
    } else {
      // 文件
      let obj = {};
      obj.size = states.size; //文件大小，以字节为单位
      obj.name = fileName; //文件名
      obj.path = path + fileName; //文件绝对路径
      // 追加文件信息
      filesList.push(obj);
    }
  });
}
// 生成具体文件信息   filesList:文件信息列表
function createStr(filesList) {
  // 具体文件信息
  let str = "";
  // 文件总大小
  let size = 0;
  // 文件列表排序
  filesList.sort((a, b) => a.size > b.size);
  // 具体文件信息
  filesList.forEach((item) => {
    let desc = `文件名:${item.name}    大小:${item.size}    路径:${item.path} \n`;
    str += desc;
    size += item.size;
  });
  fs.writeFile("./fileInfo/fileInfo.text", str, "utf8", (err) => {
    if (err) throw err;
  });
  return size;
}

// 获取文件夹目录信息  path:目录路径(注：路径末尾需带上/)   return--> size:文件大小总和  单位字节
module.exports.fileInfo = function getFileInfo(path) {
  // 保存文件目录总大小
  let size = 0;
  // 保存文件信息
  let filesList = [];
  // 读取文件信息
  readFile(path, filesList);
  // 生成具体文件信息,返回文件夹总大小
  size = createStr(filesList);
  return size;
};

module.exports.delDir = function delDir(path) {
  // 所有文件内容,需要用到同步读取
  let files = fs.readdirSync(path);
  // 遍历读取
  files.forEach((fileName) => {
    // 读取文件信息
    let states = fs.statSync(path + fileName);
    if (states.isFile()) {
      // 文件,直接删除
      fs.unlinkSync(path + fileName);
    } else {
      // 目录,递归调用本身
      delDir(path + fileName);
    }
  });
  // 删除空目录
  fs.rmdirSync(path);
};
